from lxml import etree

html = open('../素材/豆瓣.html', 'r', encoding='UTF-8').read()

tree = etree.HTML(html)

# 查找登录  当前是从根下/html下 一路匹配到你要的节点
# /html/body/div/div/div/a
# ['登录', '注册', '下载豆瓣客户端']
# 也叫路径表达式 就是按照路径一层一层往下找 把符合路径的数据都拿到
# print(tree.xpath('/html/body/div/div/div/a'))
# text() 获取路径下的字符串（文本）
# print(tree.xpath('/html/body/div/div/div/a/text()'))

# 将节点对象转换为字符串
# a_list = tree.xpath('/html/body/div/div/div/a')
# print(a_list)
# for a in a_list:
    # 通过循环获取到了每一个a节点对象  <Element a at 0x2180770ad00>
    # print(a)
    # 获取节点里面的文本
    # print(a.xpath('./text()'))
    # print(etree.tostring(a, encoding='UTF-8').decode('UTF-8'))
    # print(type(etree.tostring(a, encoding='UTF-8').decode('UTF-8')))

# // 不参照当前的位置
# 获取当前tree对象里的所有a  无论a在哪儿
# a_list = tree.xpath('//a')
# 获取所有超链接里面的文本
# a_list = tree.xpath('//a/text()')
# a_list = tree.xpath('//p/text()')
# print(a_list)


# <a>字符</a>
# <a><p>字符<p></a>
# 组合使用  /和//
# div_list = tree.xpath('//div/text()')
# div_list = tree.xpath('//div//text()')
# print(div_list)

# 带条件的查找
# 后去所有ul下的儿子li
# li_list = tree.xpath('//ul/li')
# 查找图书的li
# class="cover-col-4 clearfix"
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li')
# print(li_list[0].xpath('.//text()'))  #  .//   当前节点的无论子子孙孙(无论在当前节点下的任何位置)  ./接着当前节点向下一个节点进行匹配 就是儿子节点
# print(li_list[0].xpath('.//text()'))
# print(etree.tostring(li_list[0], encoding='UTF-8').decode('UTF-8'))
# print(li_list[0].xpath('./div/h2/a/text()'))

# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div/h2/a/text()')
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div[@class="detail-frame"]/h2/a/text()')
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div[@class="detail-frame"]/h2//text()')


# 通过位置进行查找  xpath语法中 是从第一个开始
# 获取第一个li
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[1]/div/h2/a/text()')
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div/h2/a/text()')[0]
# 获取第二个li
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[2]/div/h2/a/text()')
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div/h2/a/text()')[1]
# 获取最后一个li 采用去下表-1
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[last()]/div/h2/a/text()')
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div/h2/a/text()')[-1]
# 获取前俩个
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li[position()<3]/div/h2/a/text()')
# li_list = tree.xpath('//ul[@class="cover-col-4 clearfix"]/li/div/h2/a/text()')[0:2]
# print(li_list)

# 获取属性
# 查找所有图片的src
# print(tree.xpath('//img'))
# @属性名
# print(tree.xpath('//img/@src'))
# 获取所有超链接
# print(tree.xpath('//a/@href'))

# 作为了解
# 查找div条件是 div标签class属性值为article
# print(tree.xpath('//div[@class="article"]'))
# 查找div条件是 div标签具有class属性的
# print(tree.xpath('//div[@class]'))

# 多个条件 id和class
# print(tree.xpath('//div[@id="db-nav-book"]'))
# print(tree.xpath('//div[@class="nav"]'))
# 查找div标签  class属性值为nav 并且 id属性值为db-nav-book
# print(tree.xpath('//div[@class="nav" and @id="db-nav-book"]'))
# 或
# 查找div标签  class属性值为nav 或 id属性值为db-nav-book
# print(tree.xpath('//div[@class="nav" or @id="db-nav-book"]'))


# class="cover-col-4 clearfix"
# class="cover-col-4 pl20 clearfix"

print(tree.xpath('//ul[@class="cover-col-4 clearfix" or @class="cover-col-4 pl20 clearfix"]'))
print(tree.xpath('//ul[@class="cover-col-4 clearfix"] | //ul[@class="cover-col-4 pl20 clearfix"]'))